package com.sun.async.service;

import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.List;

/**
 * 异步Excel导入服务接口
 */
public interface AsyncExcelImportService {

    /**
     * 异步导入Excel
     * @param taskId 任务ID
     * @param file 上传的文件
     * @param importService 导入服务
     * @param <T> DTO类型
     */
    <T> void asyncImportExcel(Long taskId, File file, ImportService<T> importService);

    /**
     * 导入服务接口，用于业务逻辑处理
     * @param <T> DTO类型
     */
    interface ImportService<T> {
        /**
         * 获取DTO类型
         * @return DTO类型
         */
        Class<T> getDtoClass();

        /**
         * 处理导入数据
         * @param dataList 数据列表
         * @return 导入结果
         */
        ImportResult processData(List<T> dataList);

        /**
         * 校验数据行
         * @param data 数据对象
         * @return 校验结果，为空表示校验通过，否则返回错误信息
         */
        String validateRow(T data);
    }

    /**
     * 导入结果类
     */
    class ImportResult {
        private int successCount;
        private List<?> failedRecords;
        private String errorFilePath;

        public ImportResult(int successCount, List<?> failedRecords, String errorFilePath) {
            this.successCount = successCount;
            this.failedRecords = failedRecords;
            this.errorFilePath = errorFilePath;
        }

        public int getSuccessCount() {
            return successCount;
        }

        public List<?> getFailedRecords() {
            return failedRecords;
        }

        public String getErrorFilePath() {
            return errorFilePath;
        }
    }
}